package controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import model.BazaCunostinte;
import model.Regula;

public class MasinaForwardChaining implements MasinaInferenta {
	
	private Collection<Regula> reguli;
	private Collection<String> concluzii;
	
	public MasinaForwardChaining(BazaCunostinte bc) throws IOException {
		reguli = bc.citesteReguli();
		concluzii = bc.citesteConcluzii();
	}
	
	public String cautaSolutie(Collection<String> premise) {
		Collection<String> informatiiCurente = new ArrayList<String>();
		informatiiCurente.addAll(premise);
		boolean infoAdaugata;
		do {
			infoAdaugata = false;
			for (Regula r : reguli)
				if (!informatiiCurente.contains(r.concluzie)) {
					boolean premiseleExista = true;
					for (String premisa : r.premise)
						if (!informatiiCurente.contains(premisa))
							premiseleExista = false;
					if (premiseleExista) {
						informatiiCurente.add(r.concluzie);
						infoAdaugata = true;
					}
					
				}
		} while (infoAdaugata && getConcluzie(informatiiCurente) == null);
	
		return getConcluzie(informatiiCurente);
	}

	private String getConcluzie(Collection<String> informatiiCurente) {
		for (String info : informatiiCurente)
			if (concluzii.contains(info))
				return info;
		return null;
	}

}
